It is often difficult to estimate a specific amount of hardware resources that should be allocated to a software application to meet a desired application service level. The problem exists both at the time of software installation and after the software has been in use for a period of time. As a result of this difficulty, hardware resources are often over-allocated, leading to higher hardware and management costs and higher energy consumption.
An individual software application (e.g., a database application) may be deployed to a dedicated hardware resource (e.g., a computer). Over time, it may become apparent that costs are higher than necessary due to an over-allocation of hardware resources. It may be advantageous to re-install multiple software applications together on a reduced number of computers to share resources (e.g., computer server consolidation). In practice, this is often difficult because the installed software applications may have access to all of the available hardware resources (e.g., when hardware resources are dedicated to an individual software application). When the software applications are re-installed together on a shared computer, it may be difficult to properly allocate hardware resources of the shared computer between the different software applications.
Prediction algorithms may be used to allocate a minimum necessary amount of hardware for a software application. However, due to the complexity of many software application workloads and their relationships to hardware resources, these prediction algorithms may be unreliable. Alternatively, a software application may provide a capability to release memory available to itself to reduce resource usage. However, the process of releasing memory may result in an undesired change of application service level as a result of an increase in the usage of other hardware resources available to the software application. For example, releasing memory may increase permanent storage input/output (I/O), resulting in a poor quality application service level when the software application accesses the slower permanent storage devices.